home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 331 / gemfsc14 / aesfast.sh next >
Text File  |  1990-07-20  |  6KB  |  121 lines

  1. ;*========================================================================
  2. ;*
  3. ;* AESFAST Public Domain AES bindings.
  4. ;*
  5. ;*  Maintenance:
  6. ;*   02/10/89 v1.10 - Added more labels to items within global array.
  7. ;*========================================================================
  8.  
  9. ;*************************************************************************
  10. ;*
  11. ;* Header file for AESFAST source code modules.  Offsets (structures)
  12. ;*  and macros can be found here. (Hey!  just like a C header...)
  13. ;*
  14. ;*  Also, if the symbol AES_ALLOCBSS is defined, we will actually 
  15. ;*  allocate storage in the BSS section for the AES control blocks, if
  16. ;*  the symbol is not defined, we just define the offsets but no storage.
  17. ;*
  18. ;*************************************************************************
  19.  
  20.           .globl    aesblock    ; Everybody (potentially at least)
  21.           .globl    aes_call    ; uses these things, so we might
  22.           .globl    aes_do      ; as well define them here.
  23.  
  24. FALSE     = 0                   ; Mundane
  25. TRUE      = 1                   ; stuff.
  26.  
  27. RET2USER  = 0                   ; These are flags used by the ACall macro to
  28. RET2HERE  = 1                   ; decide between calling aes_call or aes_do.
  29.  
  30. ;-------------------------------------------------------------------------
  31. ; ACall macro.  Call the AES.  Depending on the value of the 'type' flag,
  32. ;  we generate a 'jsr aes_call' or a 'jmp aes_do'.
  33. ;-------------------------------------------------------------------------
  34.  
  35. .macro    ACall     type
  36.           .if    \type
  37.            jsr      aes_call
  38.           .else
  39.            jmp      aes_do
  40.           .endif
  41. .endm
  42.  
  43. ;-------------------------------------------------------------------------
  44. ; AControl macro.  Load register d0 with the control array (byte) values.
  45. ;  By getting all the control values into a single register (except the
  46. ;  'addrout' count, which is always zero) we can load the entire control
  47. ;  array with a single 'movep.l' instruction in aes_call.
  48. ;-------------------------------------------------------------------------
  49.  
  50. .macro    AControl  fun,ini,adi,ino
  51.           move.l    #( (\fun << 24) | (\ini << 16) | (\adi << 8) | \ino ),d0
  52. .endm
  53.  
  54. ;-------------------------------------------------------------------------
  55. ; Define the offsets within the AES block storage area.
  56. ;-------------------------------------------------------------------------
  57.  
  58.           .abs                          ; Offsets from 'aesblock'...
  59.  
  60. aespb     =         *                   ; 'aespb' MUST be first!...
  61. pcontrl:  ds.l      1                   ;   Pointer to control array
  62. pglobal:  ds.l      1                   ;   Pointer to global array
  63. pintin:   ds.l      1                   ;   Pointer to intin array
  64. pintout:  ds.l      1                   ;   Pointer to intout array
  65. padrin:   ds.l      1                   ;   Pointer to adrin array
  66. padrout:  ds.l      1                   ;   Pointer to adrout array
  67.  
  68. control   =         *                   ; Control array is next...
  69. function: ds.w      1                   ;   Function code
  70. sintin:   ds.w      1                   ;   size of intin
  71. sintout:  ds.w      1                   ;   size of intout
  72. sadrin:   ds.w      1                   ;   size of adrin
  73. sadrout:  ds.w      1                   ;   size of adrout
  74.  
  75. global:   ds.w      15                  ; Global array, needs no further def.
  76.  
  77. SZ_AESBLK =         *                   ; Size of the aesblock storage.
  78.  
  79. ;-------------------------------------------------------------------------
  80. ; If we are supposed to be allocating the BSS storage (eg, if we are
  81. ;  being included from AESCOMN), export the global labels and define
  82. ;  the necessary BSS storage.
  83. ;
  84. ;  |1.1:  Fully defined the global storage block and exported the labels
  85. ;         for all of it. Names were made up using 'gl_apid' as the example.
  86. ;         This change is primarily to support TOS 1.4, in which the AES
  87. ;         version becomes an important issue.
  88. ;-------------------------------------------------------------------------
  89.  
  90.           .globl    _gl_apid            ; Export this label for C programs.
  91.           .globl    _global             ; Export this label for C programs.
  92.           .globl    _aespb              ; Export this label for C programs.
  93.           .globl    _aescontrol         ; |v1.1: added
  94.           .globl    _gl_apversion       ; |v1.1: added
  95.           .globl    _gl_apcount         ; |v1.1: added
  96.           .globl    _gl_apid            ; |v1.1: added
  97.           .globl    _gl_apprivate       ; |v1.1: added
  98.           .globl    _gl_apptree         ; |v1.1: added
  99.           .globl    _gl_ap1resv         ; |v1.1: added
  100.           
  101.           .if       ^^defined AES_ALLOCBSS
  102.           .bss
  103. aesblock:                               ; Integrated AES data block storage.
  104. _aespb:        ds.l      6              ;   Room for aespb array.
  105. _aescontrol:   ds.w      5              ;   Room for control array.
  106. _global:                                ;   Global array...
  107. _gl_apversion: ds.w      1              ;       AES version.
  108. _gl_apcount:   ds.w      1              ;       AES max appl count.
  109. _gl_apid:      ds.w      1              ;       Application id.
  110. _gl_apprivate: ds.l      1              ;       Application-specific data.
  111. _gl_apptree:   ds.l      1              ;       Pointer to head of RSC tree.
  112. _gl_ap1resv:                            ;|v1.4: (Old name retained)
  113. _gl_apprshdr:  ds.l      1              ;|v1.4: Pointer to rshdr struct.
  114. _gl_ap2resv:   ds.l      3              ;       Rest of the global array.
  115.  
  116.           .endif ; ^^defined AES_ALLOCBSS
  117.  
  118.           .text                         ; Leave BSS mode...
  119.  
  120. ;         end of code
  121.